<script>
    function Dog(name) {
        this.name = name;

        // return {a:1}
        return function(){ console.log("xx");}
    }
    Dog.prototype.bark = function () {
        console.log('wangwang');
    }
    Dog.prototype.sayName = function () {
        console.log('my name is ' + this.name);
    }

    // (1)在构造器内部创建一个新的对象
    // (2)这个对象内部的__proto__属性会被赋值为该构造函数的prototype属性;
    // (3)让构造器中的this指向这个对象
    // (4)执行构造器中的代码
    // (5)如果构造器没有返回对象或函数，则返回上面的创建出来的对象
    // let malu = new Dog('码路');
    // console.log(malu);
    // malu.sayName();
    // malu.bark();

    function _new(Ctor,...args) {
        //=>完成你的代码
        if(!Ctor.hasOwnProperty("prototype")){
            throw new TypeError("Ctor is not a constructor")
        }
        let obj = Object.create(Ctor.prototype)
        let result = Ctor.apply(obj,args)
        if(result !== null && (typeof result == "object" || typeof result == "function")){
            return result;
        }
        return obj;
    }
    let malu = _new(Dog, '码路');
    console.log(malu);
    // malu.bark(); //=>"wangwang"
    // malu.sayName(); //=>"my name is 码路"
    // console.log(malu instanceof Dog); //=>true
</script>